fun pow (base: int, exp: int) : int =
    if exp = 0 then 1
    else base * pow(base, exp - 1);

(* 将 b1 进制数表示的 int list 转换为十进制整数 *)
fun tolnt (b: int) : (int list -> int) =
    let
        fun convert [] = 0
          | convert (x::xs) =
              x * pow(b, List.length xs) + convert xs
    in
        convert
    end;

(* 将十进制整数 n 转换为 b2 进制数的 int list 表示形式 *)
fun toBase (b: int) : (int -> int list) =
    let
        fun convert 0 = []
          | convert n =
              let
                  val remainder = n mod b
                  val quotient = n div b
              in
                  convert quotient @ [remainder]
              end
    in
        convert
    end;

(* 高阶函数 convert 的定义 *)
fun convert (b1: int, b2: int) : (int list -> int list) =
    let
        (* 将 b1 进制的列表 L 转换为十进制 *)
        val toDecimal = tolnt b1
        
        (* 将十进制转换为 b2 进制 *)
        val fromDecimal = toBase b2
    in
        fn L => fromDecimal (toDecimal L)  (* 对给定的 L 进行转换 *)
    end;

(* 测试例子 *)
val base2ToBase5 = convert (2, 5);  (* 创建一个将2进制转换为5进制的函数 *)

(* 测试不同的输入 *)
val test1 = base2ToBase5 [1, 0, 1, 0];  (* 10 in base 2 *)
val test2 = base2ToBase5 [1, 0, 1, 0, 1, 0];  (* 42 in base 2 *)

(* 输出结果 *)
val _ = print ("Base 5 of 10 (from base 2): " ^ Int.toString (List.hd test1) ^ "\n");
val _ = print ("Base 5 of 42 (from base 2): " ^ Int.toString (List.hd test2) ^ "\n");